package com.xbongbong.paas.service;

import com.xbongbong.paas.pojo.dto.*;
import com.xbongbong.paas.pojo.vo.*;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.script.pojo.dto.ProcessDTO;

/**
 * Description: 流程设计操作服务层
 *
 * @author 李杰
 * @version v1.0
 * @date 2019/1/15 14:35
 * @since v1.0
 */
public interface PaasProcessTemplateService {

    /**
     * 开启流程
     *
     * @param processOpenDTO
     * @return ProcessOpenVO
     * @throws XbbException 表单不存在
     */
    ProcessOpenVO open(ProcessOpenDTO processOpenDTO) throws XbbException;

    /**
     * 关闭流程
     *
     * @param processDeleteDTO
     * @return ProcessDeleteVO
     * @throws XbbException 数据库异常
     */
    ProcessDeleteVO delete(ProcessDeleteDTO processDeleteDTO) throws XbbException;

    /**
     * 获取流程
     *
     * @param processGetDTO
     * @return ProcessGetVO
     * @throws XbbException 流程或节点或流转条件不存在、表单解释不存在
     */
    ProcessGetVO get(ProcessGetDTO processGetDTO) throws XbbException;

    /**
     * 获取预览流程
     *
     * @param processPreviewDTO
     * @return ProcessGetVO
     * @throws XbbException 流程或节点或流转条件不存在、表单解释不存在
     */
    ProcessGetVO processPreview(ProcessPreviewDTO processPreviewDTO) throws XbbException;

    /**
     * 保存流程相关信息
     *
     * @param processUpdateDTO
     * @return ProcessUpdateVO
     * @throws XbbException 数据库异常
     */
    ProcessUpdateVO save(ProcessUpdateDTO processUpdateDTO) throws XbbException;

    /**
     * 流程启用/暂停
     *
     * @param processEnableDTO
     * @return ProcessEnableVO
     * @throws XbbException 数据库异常
     */
    ProcessEnableVO enable(ProcessEnableDTO processEnableDTO) throws XbbException;

    /**
     * 获取需审批字段列表
     *
     * @param needApproveDTO
     * @return ProcessEnableVO
     * @throws XbbException 数据库异常
     */
    NeedApproveVO needApproveFields(NeedApproveDTO needApproveDTO) throws XbbException;

    /**
     * 流程中节点的所有字段
     * @param formGetDTO
     * @return
     * @throws XbbException
     */
    ProcessFormFieldVO formFields(FormGetDTO formGetDTO) throws XbbException;

    /**
     * 切换表单流程tab时请求的接口
     * @param processParamsDTO
     * @return
     */
    ProcessParamsVO processParams(ProcessParamsDTO processParamsDTO) throws XbbException;

    /**
     * 初始化节点权限数据
     * @param processDTO
     */
    void initProcessNode(ProcessDTO processDTO) throws XbbException;

    /**
     * 流程版本
     * @param processVersionDTO
     * @return
     * @throws XbbException
     */
    ProcessVersionVO processVersion(ProcessVersionDTO processVersionDTO) throws XbbException;

    /**
     * 新增版本
     * @param processGetDTO
     * @return
     * @throws XbbException
     */
    ProcessGetVO add(ProcessGetDTO processGetDTO) throws XbbException;

    /**
     * 生成默认审批流程（只有第一次会初始化开启审批流程，如果已经初始化过就不再处理-防止用户已经自己修改过审批条件，再开启关闭经销商）
     * 参照PaasProcessTemplateServiceImpl#createProcess、及save写
     * @param processOpenDistributorDTO
     * @return com.xbongbong.paas.pojo.vo.ProcessOpenVO
     * @throws XbbException
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    ProcessOpenVO createProcess4Distributor(ProcessOpenDistributorDTO processOpenDistributorDTO) throws XbbException;

    /**
     * 归档状态变更
     * @param processArchiveDTO
     * @return
     * @throws XbbException
     */
    ProcessArchiveVO archive(ProcessArchiveDTO processArchiveDTO) throws XbbException;

    /**
     * 取消归档状态
     * @param processArchiveDTO
     * @return
     * @throws XbbException
     */
    ProcessArchiveVO cancelArchive(ProcessArchiveDTO processArchiveDTO) throws XbbException;

}
